package com.ww.springboot.boot.jvm2;

import com.ww.springboot.boot.jvm2.part.Section;
import com.ww.springboot.boot.jvm2.part.impl.*;
import com.ww.springboot.boot.jvm2.part2.*;
import com.ww.springboot.boot.jvm2.part3.对象class;
import com.ww.springboot.boot.jvm2.part3.对象实体;
import com.ww.springboot.boot.jvm2.part3.栈帧;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Stack;

/**
 * 描述：
 *
 * @author 🧑 ‍wanwei
 * @since 2023-01-07 16:07
 */
public class JvmMain {

    public static void main(String[] args) {
        System.out.println("我是JVM 模拟程序!");
        System.out.println("我是由以下成员组成的:");
        //结构
        List<Section> list = new ArrayList<>();
        执行引擎 aa = new 执行引擎();
        编译器 ab = new 编译器();
        解释器 ac = new 解释器();
        垃圾收集器 ae = new 通用垃圾收集器();
        list.add(aa);
        list.add(ab);
        list.add(ac);
        list.add(创建运行时内存区());
        list.add(ae);
        for (Section section : list) {
            System.out.println(section.toString());
        }
        //过程
        ae.gc();
    }

    private static 运行时内存区 创建运行时内存区() {
        运行时内存区 ad = new 运行时内存区();
        //1.建堆
        堆 堆1 = new 堆();
        堆1.init();
        ad.set堆(堆1);
        //2.建虚拟机栈
        虚拟机栈 虚拟机栈1 = new 虚拟机栈();
        虚拟机栈1.init();
        ad.set虚拟机栈(虚拟机栈1);
        //3.建本地方法栈
        本地方法栈 本地方法栈1 = new 本地方法栈();
        本地方法栈1.init();
        //4.建方法区
        方法区 方法区1 = new 方法区();
        方法区1.init();
        ad.set方法区(方法区1);
        //5.建程序计数器
        程序计数器 程序计数器1 = new 程序计数器();
        ad.set程序计数器(程序计数器1);
        return ad;
    }
}
